package com.xing.domain;

import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
import org.springframework.beans.factory.annotation.Value;
import org.springframework.boot.context.properties.ConfigurationProperties;
import org.springframework.context.annotation.PropertySource;
import org.springframework.stereotype.Component;
import org.springframework.validation.annotation.Validated;

import javax.validation.constraints.Email;
import javax.validation.constraints.NotBlank;
import java.util.Date;
import java.util.List;
import java.util.Map;

@Data
@AllArgsConstructor
@NoArgsConstructor
@Component
@ConfigurationProperties(prefix = "person")
@Validated //数据校验
/**
 * javaConfig 绑定配置文件的值，可以采取这些方式
 * 加载指定的配置文件
 */
//@PropertySource(value = "classpath:xing.properties")
public class Person {
    /**
     * Spring el 表达式取出配置文件的值
     */
//    @Value("${ys}")
    private String name;
    private Integer age;
    private Boolean happy;
    private Date birth;
    private Map<String,Object> maps;
    private List<Object> lists;
    private Dog dog;
    @Email
    private String email;
    //有参无参构造、get、set方法、toString()方法
    /**
     * @ConfigurationProperties作用:
     * 将配置文件中配置的每一个属性的值，映射到这个组件中;
     * 告诉SpringBoot将本类中的所有属性和配置文件中相关的配置进行绑定
     * 参数 prefix = "person":将配置文件中的person下面的所有属性——对应
     * 只有这个组件是容器中的组件，才能使用容器提供的@configurationProperties功能
     * 需要再maven导入：spring-boot-configuration-processor 依赖
     */
}
